Fix for veneers generated by linker for interworking #123
Add this suggestion to a batch that can be applied as a single commit.
This suggestion is invalid because no changes were made to the code.
Suggestions cannot be applied while the pull request is closed.
Suggestions cannot be applied while viewing a subset of changes.
Only one suggestion per line can be applied in a batch.
Add this suggestion to a batch that can be applied as a single commit.
Applying suggestions on deleted lines is not supported.
You must change the existing code in this line in order to create a valid suggestion.
Outdated suggestions cannot be applied.
This suggestion has been applied or marked resolved.
Suggestions cannot be applied from pending reviews.
Suggestions cannot be applied on multi-line comments.
Suggestions cannot be applied while the pull request is queued to merge.
Suggestion cannot be applied right now. Please check back later.
Force-enables
-Wl,--pic-veneer
linker flag.A compiler can do tail-call optimizations, emitting R_ARM_JUMP24 relocation instead of a normal call.
If this call has interworking (was from an arm function to a thumb function or vice versa), binutils produces a veneer, because it needs to do a switch. By default, these veneers do jump to an absolute address. This patch forces ld to produce veneers for position-independent binaries.
tldr; no need for
--no-optimize-sibling-calls
anymore, sibling calls will ✨ just work ✨An example of veneer before this patch:
and after: